package com.atguigu.lease.web.admin.controller.apartment;


import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.PaymentType;
import com.atguigu.lease.web.admin.service.PaymentTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;


@Tag(name = "支付方式管理")
@RequestMapping("/admin/payment")
@RestController
public class PaymentTypeController {

    @Autowired
    private PaymentTypeService paymentTypeService;

    /**
     * 发现问题：
     * 1. 多了createTime updateTime isDeleted -> 在BaseEntity中添加@JsonIgnore  -> 属性不会被转换成 json key
     * 2. 逻辑删除未生效  -> 在 BaseEntity 中加 @TableLogic
     */
    @Operation(summary = "查询全部支付方式列表")
    @GetMapping("list")
    public Result<List<PaymentType>> listPaymentType() {
        List<PaymentType> list = paymentTypeService.list();
        return Result.ok(list);
    }

    /**
     * 有就更新 没有就保存
     * 发现问题：
     * 1. 逻辑删除字段没有默认值 0  -> alter table payment_type modify is_delete int default 0;
     * 2. @JsonIgnore 我们不给前端返回！  前端给我们也没办法接受  create_time update_time
     * -> 手动解决， handler方法中进行判断  保存->添加 create_time  更新->更新 update_time
     * -> 自动解决 有人(框架或技术) 在存储数据时添加了这两个字段  -> mybatis-plus 的自动填充字段
     * -> 步骤一：实体类属性添加@TableField(  ,fill = FieldFill.INSERT | .UPDATE)
     * -> 步骤二：创建一个类(@Component)继承MetaObjectHandler  按照官网来 https://baomidou.com/guides/auto-fill-field/
     */
    @Operation(summary = "保存或更新支付方式")
    @PostMapping("saveOrUpdate")
    public Result saveOrUpdatePaymentType(@RequestBody PaymentType paymentType) {
//        if(paymentType.getId() != null){
//            // 更新  java.util
//            paymentType.setUpdateTime(new Date());
//        }else{
//            // 保存
//            paymentType.setCreateTime(new Date());
//        }
        boolean saveOrUpdate = paymentTypeService.saveOrUpdate(paymentType);
        return saveOrUpdate?Result.ok():Result.fail();
    }

    @Operation(summary = "根据ID删除支付方式")
    @DeleteMapping("deleteById")
    public Result deletePaymentById(@RequestParam Long id) {
        // 逻辑删除
        paymentTypeService.removeById(id);
        return Result.ok();
    }

}















